package com.systemic.aspect;

import com.systemic.pojo.UserInfo;
import com.systemic.vo.PageVo;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * @ClassName: UserInfoServiceAspect
 * @Description: 用户信息切面类
 * @Author:
 * @CreateTime: 2024-02-03 16:11
 * @Version:
 **/
@Aspect
@Component
public class UserInfoServiceAspect {

    /**
     * 基本实现思路：拦截service层返回结果，进行处理后再返回给controller
     */


    /**
     * 切点匹配UserInfoService中的selectListPage方法
     */
    @Pointcut("execution(* com.systemic.service.UserInfoService.selectListPage(..))")
    public void serviceMethodPointcut() {
        // 定义切入点，拦截service层的方法
    }

//    @Before("serviceMethodPointcut()")
//    public void beforeServiceMethod() {
//        // 在service方法执行前进行拦截处理
//        // 这里可以获取service层的方法返回结果，并进行排序等操作
//    }


    /**
     * 后置通知（AfterReturning）方法sortByGmtCreateDesc，该方法会在selectListPage方法执行后被调用，并传入返回的结果。
     * 在后置通知方法中，我们对返回的结果进行排序，排序的依据是gmtCreate字段。
     * @param result
     * @return
     */
    @AfterReturning(pointcut = "serviceMethodPointcut()", returning = "result")
    public List<UserInfo> sortByGmtCreateDesc(List<UserInfo> result) {
        if (result != null && !result.isEmpty()) {
            Collections.sort(result, (o1, o2) -> o2.getGmtCreate().compareTo(o1.getGmtCreate()));
        }
        return result;
    }

}
